﻿Imports System.Data
Imports System.Data.Odbc
Imports WSEntidades
Imports Utilerias
Imports Npgsql
Imports MySql.Data.MySqlClient

Public Class ProductoFact
    Public Shared Function Build(ByVal dr As MySqlDataReader) As ProductoBE
        Dim tmpProducto As ProductoBE = New ProductoBE()
        Try
            With tmpProducto
                .IdProducto = convertDTFromDb.convertInt32(dr.Item("idProducto"))
                .Clave = convertDTFromDb.ConvertString(dr.Item("Clave"))
                Select Case convertDTFromDb.ConvertString(dr.Item("Tipo"))
                    Case "P"
                        .Tipo = ProductoBE.TipoProducto.Producto
                    Case "S"
                        .Tipo = ProductoBE.TipoProducto.Servicio
                    Case "K"
                        .Tipo = ProductoBE.TipoProducto.Kits
                    Case Else
                        .Tipo = ProductoBE.TipoProducto.Producto
                End Select
                Select Case convertDTFromDb.ConvertString(dr.Item("StatusProd"))
                    Case "A"
                        .Status = ProductoBE.StatusProducto.Activo
                    Case "I"
                        .Status = ProductoBE.StatusProducto.Inactivo
                End Select
                .Nombre = convertDTFromDb.ConvertString(dr.Item("Nombre"))
                .Descripcion = convertDTFromDb.ConvertString(dr.Item("Descripcion"))
                .Observaciones = convertDTFromDb.ConvertString(dr.Item("Observaciones"))
                .UdeM = UdeMFact.Build(dr)
                .DesglosaPrecio = convertDTFromDb.ConvertBoolean(dr.Item("DesglosaPrecio"))
                .ManoObra = convertDTFromDb.ConvertDecimal(dr.Item("ManoObra"))
                .Refacciones = convertDTFromDb.ConvertDecimal(dr.Item("Refacciones"))
                .PrecioUnitario = convertDTFromDb.ConvertDecimal(dr.Item("PrecioUnitario"))
                Select Case convertDTFromDb.ConvertString(dr.Item("Calculos"))
                    Case "N"
                        .Calculos = ProductoBE.CalculosProducto.Normal
                    Case "C"
                        .Calculos = ProductoBE.CalculosProducto.Cantidad
                    Case "P"
                        .Calculos = ProductoBE.CalculosProducto.PrecioUnitario
                End Select
                Select Case convertDTFromDb.ConvertString(dr.Item("TipoIVA"))
                    Case "N"
                        .TipoIVA = Enumeraciones.tiposIVA.Normal
                    Case "0"
                        .TipoIVA = Enumeraciones.tiposIVA.TasaCero
                    Case "E"
                        .TipoIVA = Enumeraciones.tiposIVA.Exento
                    Case Else
                        .TipoIVA = Enumeraciones.tiposIVA.Normal
                End Select
                Select Case convertDTFromDb.ConvertString(dr.Item("TipoBaseIVA"))
                    Case "P"
                        .TipoBaseIVA = Enumeraciones.tipoBaseParaIVA.Porcentaje
                    Case "M"
                        .TipoBaseIVA = Enumeraciones.tipoBaseParaIVA.Monto
                    Case Else
                        .TipoBaseIVA = Enumeraciones.tipoBaseParaIVA.Porcentaje
                End Select
                .PorcentajeBaseIVA = convertDTFromDb.ConvertDecimal(dr.Item("PorcentajeBaseIVA"))
                .MontoBaseIVA = convertDTFromDb.ConvertDecimal(dr.Item("MontoBaseIVA"))
                .AplicaIEPS = convertDTFromDb.ConvertBoolean(dr.Item("AplicaIEPS"))
                .IEPSAfectaIVA = convertDTFromDb.ConvertBoolean(dr.Item("IEPSAfectaIVA"))
                .TasaIEPS = convertDTFromDb.ConvertDecimal(dr.Item("TasaIEPS"))
                .CuotaIEPS = convertDTFromDb.ConvertDecimal(dr.Item("CuotaIEPS"))
                .AplicaIVARET = convertDTFromDb.ConvertBoolean(dr.Item("AplicaIVARET"))
                .TasaIVARET = convertDTFromDb.ConvertDecimal(dr.Item("TasaIVARET"))
                .AplicaISR = convertDTFromDb.ConvertBoolean(dr.Item("AplicaISR"))
                .TasaISR = convertDTFromDb.ConvertDecimal(dr.Item("TasaISR"))
                Select Case convertDTFromDb.ConvertString(dr.Item("Es"))
                    Case "I"
                        .Es = ProductoBE.EsProducto.Inmueble
                    Case "A"
                        .Es = ProductoBE.EsProducto.Importado
                    Case "E"
                        .Es = ProductoBE.EsProducto.IEDU
                End Select
                .Predial = convertDTFromDb.ConvertString(dr.Item("Predial"))
                .CodigoBarras = convertDTFromDb.ConvertString(dr.Item("CodigoBarras"))
            End With
            Return tmpProducto
        Catch ex As Exception
            Throw
        Finally
            tmpProducto = Nothing
        End Try
    End Function

    Shared Function BuildProductoAdicional(ByVal myDR As MySqlDataReader) As ProductoAdicBE
        Dim tmpProdAdic As ProductoAdicBE = New ProductoAdicBE
        Try
            With tmpProdAdic
                .Clave = convertDTFromDb.ConvertString(myDR.Item("ClaveProdAdic"))
                If (myDR.Item("IdTipo") Is DBNull.Value) Then
                    .TipoProducto = Nothing
                Else
                    .TipoProducto = TiposProductosFact.buildInternal(myDR.Item("IdTipo"),
                                                                     myDR.Item("ClaveTipoProd"),
                                                                     myDR.Item("DescrTipoProd"),
                                                                     myDR.Item("Estatus"),
                                                                     myDR.Item("IdFamilia"))
                End If
                '.TipoInv = convertDTFromDb.ConvertString(myDR.Item("TipoInv"))
                .StockMax = convertDTFromDb.ConvertDecimal(myDR.Item("StockMax"))
                .StockMin = convertDTFromDb.ConvertDecimal(myDR.Item("StockMin"))
                .PuntoReorden = convertDTFromDb.ConvertDecimal(myDR.Item("PuntoReorden"))
                .CostoPromedio = convertDTFromDb.ConvertDecimal(myDR.Item("CostoPromedio"))
                .UltimoCosto = convertDTFromDb.ConvertDecimal(myDR.Item("UltimoCosto"))
                .UnidadEntrada = UdeMFact.buildInternal(myDR.Item("IdUdeM"),
                                                        myDR.Item("DesUdeM"),
                                                        myDR.Item("EstatusUdeM"))
                .FactorConversion = convertDTFromDb.ConvertDecimal(myDR.Item("FactorConversion"))
                .ManejaLotes = convertDTFromDb.ConvertBoolean(myDR.Item("ManejaLotes"))
                If (myDR.Item("IdU1") Is DBNull.Value) Then
                    .Ubicacion1 = Nothing
                Else
                    .Ubicacion1 = UbicacionFact.buildInternal(myDR.Item("IdU1"),
                                                              myDR.Item("ClaveU1"),
                                                              myDR.Item("DescrU1"),
                                                              myDR.Item("EstatusU1"))
                End If
                If (myDR.Item("IdU2") Is DBNull.Value) Then
                    .Ubicacion1 = Nothing
                Else
                    .Ubicacion1 = UbicacionFact.buildInternal(myDR.Item("IdU2"),
                                                              myDR.Item("ClaveU2"),
                                                              myDR.Item("DescrU2"),
                                                              myDR.Item("EstatusU2"))
                End If
                If (myDR.Item("IdU3") Is DBNull.Value) Then
                    .Ubicacion1 = Nothing
                Else
                    .Ubicacion1 = UbicacionFact.buildInternal(myDR.Item("IdU3"),
                                                              myDR.Item("ClaveU3"),
                                                              myDR.Item("DescrU3"),
                                                              myDR.Item("EstatusU3"))
                End If
                If (myDR.Item("Proveedor1") Is DBNull.Value) Then
                    .Proveedor1 = Nothing
                Else
                    .Proveedor1 = New ProveedoresBE()
                    .Proveedor1.IdPro = convertDTFromDb.convertInt32(myDR.Item("Proveedor1"))
                End If
                If (myDR.Item("Proveedor2") Is DBNull.Value) Then
                    .Proveedor2 = Nothing
                Else
                    .Proveedor2 = New ProveedoresBE
                    .Proveedor2.IdPro = convertDTFromDb.convertInt32(myDR.Item("Proveedor2"))
                End If
            End With
            Return tmpProdAdic
        Catch ex As Exception
            Throw
        Finally
            tmpProdAdic = Nothing
        End Try
    End Function

End Class
